#pragma once
#include "Input.h"
using namespace Reign::Core::MathF32;

namespace Reign
{namespace Input
{namespace DI
{
	public ref class Mouse : Disposable, MouseI
	{
		#pragma region Properties
		private: Input^ input;
		private: IDirectInputDevice8* device;
		
		private: Button^ left;
		public: property Button^ Left {virtual Button^ get();}

		private: Button^ right;
		public: property Button^ Right {virtual Button^ get();}

		private: Button^ middle;
		public: property Button^ Middle {virtual Button^ get();}

		private: long velocityPosLastX, velocityPosLastY;
		private: Vector2 velocity;
		public: property Vector2 Velocity {virtual Vector2 get();}

		private: Vector2 location;
		public: property Vector2 Location {virtual Vector2 get();}

		private: Vector2 screenLocation;
		public: property Vector2 ScreenLocation {virtual Vector2 get();}

		private: long lastScrollWheelVelocity;
		private: Vector3 scrollWheelVelocity;
		public: property Vector3 ScrollWheelVelocity {virtual Vector3 get();}
		#pragma endregion
		
		#pragma region Constructors
		public: Mouse(DisposableI^ parent);
		public: ~Mouse();
		private: void null();
		#pragma endregion
		
		#pragma region Methods
		public: virtual void Update();
		#pragma endregion
	};
}
}
}